
% #1
disp('#1');
A = [1 2 3; 2 4 1; 3 1 5];
[eigenvectors, eigenvalues] = eig(A);
x =  eigenvectors(:,1);
lambda = eigenvalues(1);
B = rand(3,3);
I = eye(3);

disp('r1 = (B * A / B - lambda * I) * (B * x)');
disp('Es un vector [0;0;0]');
r1 = (B * A / B - lambda * I) * (B * x)

isEqualAbs(r1,[0;0;0],1e-6) %Da un vector de [0 0 0];


% #2
disp('#2');
T = tril(B); % Triangulamos la matriz B
d = diag(T);
f = flipud(eig(T));
% Hacemos flip porque la diagonal es igual a los eigenvalues pero salen en orden inverso

isEqualAbs(d,f,1e-6)

% #3
disp('#3');

M = [3 -2; 4 -1]; % Construimos una matriz con eigenvalues imaginarios
[evec, eval] = eig(M);
R = rand(3,3);
S = tril(R) + tril(R)'; % Construimos una matriz simetrica
disp('Nunca salen imaginarios');
eig(S) % Nunca salen imaginarios

% # 4
disp('#4');
trace(A)
sum(sum(eigenvalues)) %sum(eigenvalues) hace la suma por columnas

% # 5
disp('#5');

U = eigenvectors;
D = eigenvalues;

%Comprobamos la primera propiedad U'*A*U = D

isEqualAbs(U'*A*U,D,1e-6)

%Comprobamos la segunda propiedad A = U*D*U'

isEqualAbs(A,U*D*U',1e-6)










